﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using Fuyao.Business.Entities.Models;
using System.Xml.Linq;


namespace Fuyao.Data.SQLServer.DAO
{
    public class DAOCliente
    {
        string strCnx = clsConexionDB.getConexionSQL();

        public int InsertCliente(Cliente BE)
        {
            int _result = 0;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);

            try
            {
                strCommand.Append("FYAO_InsertCliente");
                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.StoredProcedure;
                sqlCommand.Parameters.Add("@CodigoCliente", SqlDbType.VarChar, 20).Value = BE.CodigoCliente;
                sqlCommand.Parameters.Add("@NombreCliente", SqlDbType.VarChar, 100).Value = BE.NombreCliente;
                sqlCommand.Parameters.Add("@RUC", SqlDbType.VarChar,11).Value = BE.RUC;
                sqlCommand.Parameters.Add("@DNI", SqlDbType.VarChar, 10).Value = BE.DNI;
                sqlCommand.Parameters.Add("@Telefono", SqlDbType.VarChar, 50).Value = BE.Telefono;
                sqlCommand.Parameters.Add("@VendedorID", SqlDbType.Int).Value = BE.VendedorID;
                sqlCommand.Parameters.Add("@CreadoPor", SqlDbType.Int).Value = BE.CreadoPor;
                sqlCommand.Parameters.Add("@XML", SqlDbType.Xml).Value = getItemLinqXML_InsertDirecciones(BE.Direccions);
                cnx.Open();
                _result = Convert.ToInt32(sqlCommand.ExecuteScalar());

            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return _result;
        }

        public bool UpdateCliente(Cliente BE)
        {
            bool _result = false;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);

            try
            {
                strCommand.Append("FYAO_UpdateCliente");
                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.StoredProcedure;
                sqlCommand.Parameters.Add("@ClienteID", SqlDbType.Int).Value = BE.ClienteID;
                sqlCommand.Parameters.Add("@CodigoCliente", SqlDbType.VarChar, 20).Value = BE.CodigoCliente;
                sqlCommand.Parameters.Add("@NombreCliente", SqlDbType.VarChar, 100).Value = BE.NombreCliente;
                sqlCommand.Parameters.Add("@RUC", SqlDbType.VarChar, 11).Value = BE.RUC;
                sqlCommand.Parameters.Add("@DNI", SqlDbType.VarChar, 10).Value = BE.DNI;
                sqlCommand.Parameters.Add("@Telefono", SqlDbType.VarChar,50).Value = BE.Telefono;
                sqlCommand.Parameters.Add("@VendedorID", SqlDbType.Int).Value = BE.VendedorID;
                sqlCommand.Parameters.Add("@ModificadoPor", SqlDbType.Int).Value = BE.CreadoPor;
                sqlCommand.Parameters.Add("@Estado", SqlDbType.Bit).Value = BE.Estado;
                sqlCommand.Parameters.Add("@XML", SqlDbType.Xml).Value = getItemLinqXML_UpdateDirecciones(BE.Direccions);
                cnx.Open();
                _result = Convert.ToBoolean(sqlCommand.ExecuteNonQuery());

            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return _result;
        }       

        public Cliente getClienteByField(string columnName, string columnValue)
        {

            Cliente oCliente = null;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);

            try
            {
                strCommand.Append("SELECT ClienteID,CodigoCliente,NombreCliente,Direccion,RUC,DNI,Telefono,Estado,VendedorID FROM CLIENTE WHERE ");
                strCommand.Append(columnName).Append("= @columnName");

                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.Text;

                sqlCommand.Parameters.Add("@columnName", SqlDbType.VarChar).Value = columnValue;

                cnx.Open();
                SqlDataReader dr = sqlCommand.ExecuteReader();

                if (dr.Read())
                {
                    oCliente = new Cliente();
                    if (!Convert.IsDBNull(dr["ClienteID"])) oCliente.ClienteID = Convert.ToInt32(dr["ClienteID"]);
                    if (!Convert.IsDBNull(dr["CodigoCliente"])) oCliente.CodigoCliente = Convert.ToString(dr["CodigoCliente"]);
                    if (!Convert.IsDBNull(dr["NombreCliente"])) oCliente.NombreCliente = Convert.ToString(dr["NombreCliente"]);
                    if (!Convert.IsDBNull(dr["Direccion"])) oCliente.Direccion = Convert.ToString(dr["Direccion"]);
                    if (!Convert.IsDBNull(dr["RUC"])) oCliente.RUC = Convert.ToString(dr["RUC"]);
                    if (!Convert.IsDBNull(dr["DNI"])) oCliente.DNI = Convert.ToString(dr["DNI"]);
                    if (!Convert.IsDBNull(dr["Telefono"])) oCliente.Telefono = Convert.ToString(dr["Telefono"]);
                    if (!Convert.IsDBNull(dr["Estado"])) oCliente.Estado = Convert.ToBoolean(dr["Estado"]);
                    if (!Convert.IsDBNull(dr["VendedorID"])) oCliente.VendedorID = Convert.ToInt32(dr["VendedorID"]);
                }

                dr.Close();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return oCliente;
        }

        public bool UpdateClienteRUC(Cliente BE)
        {
            bool _result = false;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);

            try
            {
                strCommand.Append("UPDATE CLIENTE SET RUC=@RUC WHERE ClienteID = @ClienteID ");
                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.Text;
                sqlCommand.Parameters.Add("@ClienteID", SqlDbType.Int).Value = BE.ClienteID;
                sqlCommand.Parameters.Add("@RUC", SqlDbType.VarChar).Value = BE.RUC;
                cnx.Open();
                _result = Convert.ToBoolean(sqlCommand.ExecuteNonQuery());

            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return _result;
        }


        public bool UpdateClienteDNI(Cliente BE)
        {
            bool _result = false;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);

            try
            {
                strCommand.Append("UPDATE CLIENTE SET DNI=@DNI WHERE ClienteID = @ClienteID ");
                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.Text;
                sqlCommand.Parameters.Add("@ClienteID", SqlDbType.Int).Value = BE.ClienteID;
                sqlCommand.Parameters.Add("@DNI", SqlDbType.VarChar).Value = BE.DNI;
                cnx.Open();
                _result = Convert.ToBoolean(sqlCommand.ExecuteNonQuery());

            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return _result;
        }     


        public bool DeleteCliente(int idClient, int idUserLogueado)
        {
            bool _result = false;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);

            try
            {
                strCommand.Append("UPDATE dbo.Cliente set Estado=@Estado, FechaModificacion=getDate(),ModificadoPor=@ModificadoPor ");
                strCommand.Append("WHERE ClienteID = @ClienteID ");

                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.Parameters.Add("@ClienteID", SqlDbType.Int).Value = idClient;
                sqlCommand.Parameters.Add("@Estado", SqlDbType.Bit).Value = false;
                sqlCommand.Parameters.Add("@ModificadoPor", SqlDbType.Int).Value = idUserLogueado;
                cnx.Open();
                _result = Convert.ToBoolean(sqlCommand.ExecuteNonQuery());

            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return _result;
        }

        public List<Cliente> getClienteByFilter(Cliente BE)
        {

            Cliente oCliente = null;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);
            List<Cliente> listClientes = new List<Cliente>();

            try
            {
                strCommand.Append("FYAO_getClienteByFiler");
                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.StoredProcedure;

                sqlCommand.Parameters.Add("@Codigo", SqlDbType.VarChar, 20).Value = BE.CodigoCliente;
                sqlCommand.Parameters.Add("@Nombre", SqlDbType.VarChar, 100).Value = BE.NombreCliente;
                sqlCommand.Parameters.Add("@VendedorID", SqlDbType.Int).Value = BE.VendedorID;
                sqlCommand.Parameters.Add("@Estado", SqlDbType.Bit).Value = BE.Estado;

                cnx.Open();
                SqlDataReader dr = sqlCommand.ExecuteReader();

                while (dr.Read())
                {
                    oCliente = new Cliente();
                    if (!Convert.IsDBNull(dr["ClienteID"])) oCliente.ClienteID = Convert.ToInt32(dr["ClienteID"]);
                    if (!Convert.IsDBNull(dr["CodigoCliente"])) oCliente.CodigoCliente = Convert.ToString(dr["CodigoCliente"]);
                    if (!Convert.IsDBNull(dr["NombreCliente"])) oCliente.NombreCliente = Convert.ToString(dr["NombreCliente"]);
                    if (!Convert.IsDBNull(dr["Direccion"])) oCliente.Direccion = Convert.ToString(dr["Direccion"]);
                    if (!Convert.IsDBNull(dr["DNI"])) oCliente.DNI = Convert.ToString(dr["DNI"]);
                    if (!Convert.IsDBNull(dr["RUC"])) oCliente.RUC = Convert.ToString(dr["RUC"]);
                    if (!Convert.IsDBNull(dr["Telefono"])) oCliente.Telefono = Convert.ToString(dr["Telefono"]);
                    if (!Convert.IsDBNull(dr["Estado"])) oCliente.Estado = Convert.ToBoolean(dr["Estado"]);
                    if (!Convert.IsDBNull(dr["VendedorID"])) oCliente.VendedorID = Convert.ToInt32(dr["VendedorID"]);
                    if (!Convert.IsDBNull(dr["VendedorNombre"])) oCliente.VendedorNombre = Convert.ToString(dr["VendedorNombre"]);
                    if (!Convert.IsDBNull(dr["IsPrincipalDesc"])) oCliente.IsPrincipalDesc = Convert.ToString(dr["IsPrincipalDesc"]);
                    listClientes.Add(oCliente);
                }

                dr.Close();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return listClientes;
        }

        public List<Cliente> getClienteByFilerAllAddress(Cliente BE)
        {

            Cliente oCliente = null;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);
            List<Cliente> listClientes = new List<Cliente>();

            try
            {
                strCommand.Append("FYAO_getClienteByFilerAllAddress");
                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.StoredProcedure;

                sqlCommand.Parameters.Add("@Codigo", SqlDbType.VarChar, 20).Value = BE.CodigoCliente;
                sqlCommand.Parameters.Add("@Nombre", SqlDbType.VarChar, 100).Value = BE.NombreCliente;
                sqlCommand.Parameters.Add("@Estado", SqlDbType.Bit).Value = BE.Estado;

                cnx.Open();
                SqlDataReader dr = sqlCommand.ExecuteReader();

                while (dr.Read())
                {
                    oCliente = new Cliente();
                    if (!Convert.IsDBNull(dr["ClienteID"])) oCliente.ClienteID = Convert.ToInt32(dr["ClienteID"]);
                    if (!Convert.IsDBNull(dr["CodigoCliente"])) oCliente.CodigoCliente = Convert.ToString(dr["CodigoCliente"]);
                    if (!Convert.IsDBNull(dr["NombreCliente"])) oCliente.NombreCliente = Convert.ToString(dr["NombreCliente"]);
                    if (!Convert.IsDBNull(dr["Direccion"])) oCliente.Direccion = Convert.ToString(dr["Direccion"]);
                    if (!Convert.IsDBNull(dr["DNI"])) oCliente.DNI = Convert.ToString(dr["DNI"]);
                    if (!Convert.IsDBNull(dr["RUC"])) oCliente.RUC = Convert.ToString(dr["RUC"]);
                    if (!Convert.IsDBNull(dr["Telefono"])) oCliente.Telefono = Convert.ToString(dr["Telefono"]);
                    if (!Convert.IsDBNull(dr["Estado"])) oCliente.Estado = Convert.ToBoolean(dr["Estado"]);
                    if (!Convert.IsDBNull(dr["VendedorID"])) oCliente.VendedorID = Convert.ToInt32(dr["VendedorID"]);
                    if (!Convert.IsDBNull(dr["VendedorNombre"])) oCliente.VendedorNombre = Convert.ToString(dr["VendedorNombre"]);
                    if (!Convert.IsDBNull(dr["IsPrincipalDesc"])) oCliente.IsPrincipalDesc = Convert.ToString(dr["IsPrincipalDesc"]);
                    listClientes.Add(oCliente);
                }

                dr.Close();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return listClientes;
        }

        public Cliente getClienteByClienteID(int ClienteID)
        {

            Cliente oCliente = null;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);

            try
            {
                strCommand.Append("select Cli.ClienteID,Cli.CodigoCliente,Cli.NombreCliente,Dir.Direccion,Cli.RUC,Cli.DNI,Cli.Telefono,Cli.VendedorID,(Vend.NombreVendedor + ' ' + Vend.ApellidoVendedor) VendedorNombre,Cli.Estado ");
                strCommand.Append("from Cliente Cli left join Vendedor Vend on Cli.VendedorID=Vend.VendedorID left join Direccion Dir on (Cli.ClienteID=Dir.ClienteID and Dir.EsPrincipal=1) where Cli.ClienteID=@ClienteID order by 2,3");

                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.Text;

                sqlCommand.Parameters.Add("@ClienteID", SqlDbType.Int).Value = ClienteID;

                cnx.Open();
                SqlDataReader dr = sqlCommand.ExecuteReader();

                if (dr.Read())
                {
                    oCliente = new Cliente();
                    if (!Convert.IsDBNull(dr["ClienteID"])) oCliente.ClienteID = Convert.ToInt32(dr["ClienteID"]);
                    if (!Convert.IsDBNull(dr["CodigoCliente"])) oCliente.CodigoCliente = Convert.ToString(dr["CodigoCliente"]);
                    if (!Convert.IsDBNull(dr["NombreCliente"])) oCliente.NombreCliente = Convert.ToString(dr["NombreCliente"]);
                    if (!Convert.IsDBNull(dr["Direccion"])) oCliente.Direccion = Convert.ToString(dr["Direccion"]);
                    if (!Convert.IsDBNull(dr["RUC"])) oCliente.RUC = Convert.ToString(dr["RUC"]);
                    if (!Convert.IsDBNull(dr["DNI"])) oCliente.DNI = Convert.ToString(dr["DNI"]);
                    if (!Convert.IsDBNull(dr["Telefono"])) oCliente.Telefono = Convert.ToString(dr["Telefono"]);
                    if (!Convert.IsDBNull(dr["VendedorID"])) oCliente.VendedorID = Convert.ToInt32(dr["VendedorID"]);
                    if (!Convert.IsDBNull(dr["VendedorNombre"])) oCliente.VendedorNombre = Convert.ToString(dr["VendedorNombre"]);
                    if (!Convert.IsDBNull(dr["Estado"])) oCliente.Estado = Convert.ToBoolean(dr["Estado"]);                    
                }

                dr.Close();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return oCliente;
        }

        public List<Direccion> getDetalleAddressByClienteID(int ClienteID)
        {

            Direccion oDireccion = null;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);
            List<Direccion> listDetalleAddress = new List<Direccion>();

            try
            {
                strCommand.Append("select Dir.DireccionID,Dir.Direccion,Dir.ClienteID,Dir.DepartamentoID,Dpto.Departamento,Dir.ProvinciaID,Prv.Provincia,Dir.DistritoID,Dto.Distrito,Dir.EsPrincipal, ");
                strCommand.Append("case when Dir.EsPrincipal= 1 then 'SI' else 'NO' end IsPrincipalDesc from dbo.Direccion Dir inner join  dbo.Departamento Dpto on Dir.DepartamentoID=Dpto.DepartamentoID ");
                strCommand.Append("inner join dbo.Provincia Prv on Dir.ProvinciaID=Prv.ProvinciaID inner join dbo.Distrito Dto on Dir.DistritoID=Dto.DistritoID where Dir.ClienteID=@ClienteID ");

                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.Text;

                sqlCommand.Parameters.Add("@ClienteID", SqlDbType.Int).Value = ClienteID;

                cnx.Open();
                SqlDataReader dr = sqlCommand.ExecuteReader();

                while (dr.Read())
                {
                    oDireccion = new Direccion();
                    if (!Convert.IsDBNull(dr["DireccionID"])) oDireccion.DireccionID = Convert.ToInt32(dr["DireccionID"]);
                    if (!Convert.IsDBNull(dr["Direccion"])) oDireccion.Direccion1 = Convert.ToString(dr["Direccion"]);
                    if (!Convert.IsDBNull(dr["ClienteID"])) oDireccion.ClienteID = Convert.ToInt32(dr["ClienteID"]);
                    if (!Convert.IsDBNull(dr["DepartamentoID"])) oDireccion.DepartamentoID = Convert.ToInt32(dr["DepartamentoID"]);
                    if (!Convert.IsDBNull(dr["Departamento"])) oDireccion.DepartamentoDesc = Convert.ToString(dr["Departamento"]);
                    if (!Convert.IsDBNull(dr["ProvinciaID"])) oDireccion.ProvinciaID = Convert.ToInt32(dr["ProvinciaID"]);
                    if (!Convert.IsDBNull(dr["Provincia"])) oDireccion.ProvinciaDesc = Convert.ToString(dr["Provincia"]);
                    if (!Convert.IsDBNull(dr["DistritoID"])) oDireccion.DistritoID = Convert.ToInt32(dr["DistritoID"]);
                    if (!Convert.IsDBNull(dr["Distrito"])) oDireccion.DistritoDesc = Convert.ToString(dr["Distrito"]);
                    if (!Convert.IsDBNull(dr["EsPrincipal"])) oDireccion.EsPrincipal = Convert.ToBoolean(dr["EsPrincipal"]);
                    if (!Convert.IsDBNull(dr["IsPrincipalDesc"])) oDireccion.IsPrincipalDesc = Convert.ToString(dr["IsPrincipalDesc"]);
                    listDetalleAddress.Add(oDireccion);
                }

                dr.Close();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return listDetalleAddress;
        }

        public List<Departamento> getAllDepartamentos()
        {
            Departamento oDepartamento = null;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);
            List<Departamento> listDepartamento = new List<Departamento>();

            try
            {
                strCommand.Append("SELECT DepartamentoID,Departamento FROM dbo.Departamento ORDER BY 2 ");
                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.Text;

                cnx.Open();
                SqlDataReader dr = sqlCommand.ExecuteReader();

                while (dr.Read())
                {
                    oDepartamento = new Departamento();
                    if (!Convert.IsDBNull(dr["DepartamentoID"])) oDepartamento.DepartamentoID = Convert.ToInt32(dr["DepartamentoID"]);
                    if (!Convert.IsDBNull(dr["Departamento"])) oDepartamento.Departamento1 = Convert.ToString(dr["Departamento"]);                   
                    listDepartamento.Add(oDepartamento);
                }

                dr.Close();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return listDepartamento;
        }

        public List<Provincia> getAllProvinciaByDepartamentoID(int DepartamentoId)
        {
            Provincia oProvincia = null;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);
            List<Provincia> listProvincia = new List<Provincia>();

            try
            {
                strCommand.Append("SELECT ProvinciaID,Provincia FROM dbo.Provincia where DepartamentoID=@DepartamentoID ORDER BY 2 ");
                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.Text;

                sqlCommand.Parameters.Add("@DepartamentoID", SqlDbType.Int).Value = DepartamentoId;

                cnx.Open();
                SqlDataReader dr = sqlCommand.ExecuteReader();

                while (dr.Read())
                {
                    oProvincia = new Provincia();
                    if (!Convert.IsDBNull(dr["ProvinciaID"])) oProvincia.ProvinciaID = Convert.ToInt32(dr["ProvinciaID"]);
                    if (!Convert.IsDBNull(dr["Provincia"])) oProvincia.Provincia1 = Convert.ToString(dr["Provincia"]);
                    listProvincia.Add(oProvincia);
                }

                dr.Close();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return listProvincia;
        }

        public List<Distrito> getAllDistritosByProvinciaID(int ProvinciaId)
        {
            Distrito oDistrito = null;
            StringBuilder strCommand = new StringBuilder();
            SqlConnection cnx = new SqlConnection(strCnx);
            List<Distrito> listDistrito = new List<Distrito>();

            try
            {
                strCommand.Append("SELECT DistritoID,Distrito FROM dbo.Distrito where ProvinciaID=@ProvinciaID ORDER BY 2 ");
                SqlCommand sqlCommand = new SqlCommand(strCommand.ToString(), cnx);
                sqlCommand.CommandType = CommandType.Text;

                sqlCommand.Parameters.Add("@ProvinciaID", SqlDbType.Int).Value = ProvinciaId;

                cnx.Open();
                SqlDataReader dr = sqlCommand.ExecuteReader();

                while (dr.Read())
                {
                    oDistrito = new Distrito();
                    if (!Convert.IsDBNull(dr["DistritoID"])) oDistrito.DistritoID = Convert.ToInt32(dr["DistritoID"]);
                    if (!Convert.IsDBNull(dr["Distrito"])) oDistrito.Distrito1 = Convert.ToString(dr["Distrito"]);
                    listDistrito.Add(oDistrito);
                }

                dr.Close();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                cnx.Close();
            }
            return listDistrito;
        }

        private string getItemLinqXML_InsertDirecciones(ICollection<Direccion> listDirecciones)
        {
            var xEle = new XElement("ITEMS",//raiz
                            from item in listDirecciones
                            select new XElement("ITEM",//nodo
                                   new XAttribute("Direccion", item.Direccion1),
                                   new XAttribute("DepartamentoID", item.DepartamentoID),
                                   new XAttribute("ProvinciaID", item.ProvinciaID),
                                   new XAttribute("EsPrincipal", item.EsPrincipal),
                                   new XAttribute("DistritoID", item.DistritoID)                                  
                                   )); //atributos                                  
            return xEle.ToString();
        }

        private string getItemLinqXML_UpdateDirecciones(ICollection<Direccion> listDirecciones)
        {
            var xEle = new XElement("ITEMS",//raiz
                            from item in listDirecciones
                            select new XElement("ITEM",//nodo
                                   new XAttribute("Direccion", item.Direccion1),
                                   new XAttribute("ClienteID", item.ClienteID),
                                   new XAttribute("DepartamentoID", item.DepartamentoID),
                                   new XAttribute("ProvinciaID", item.ProvinciaID),
                                   new XAttribute("EsPrincipal", item.EsPrincipal),
                                   new XAttribute("DistritoID", item.DistritoID)
                                   )); //atributos                                  
            return xEle.ToString();
        }
    }
}
